#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a),i##END=(b);i<=i##END;i++)
#define Rof(i,b,a) for(int i=(b),i##END=(a);i>=i##END;i--)
#define go(u) for(int i=head[u];i;i=nxt[i])
using namespace std;
inline int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
    return x*f;
}
bool ST;
const int N=2e5+10,K=405,p=998244353;
int n,k;vector<int> g[N];
int L,R,tot;
void dfs(int u,int f){
	tot++;
	for(int v:g[u])if(v!=f&&L<=v&&v<=R)dfs(v,u);
}
bool check(int l,int r){
	tot=0,L=l,R=r,dfs(l,0);
	return tot==r-l+1;
}
set<int> S[N];
int f[N][K];
bool ED;
signed main(){
//	printf("%.2lf MB\n",abs(&ED-&ST)/1024.0/1024.0);
	freopen("soft.in","r",stdin);
	freopen("soft.out","w",stdout);
	n=read(),k=read();int fl=1;
	For(i,2,n){
		int u=read(),v=read();
		g[u].push_back(v),g[v].push_back(u);
		fl&=(v==u+1);
	}f[0][0]=1;
	if(fl){
		For(i,1,n)For(j,0,k){
			f[i][j]=f[i-1][j];
			if(j)(f[i][j]+=f[i-1][j-1])%=p;
		}
		For(i,1,k)printf("%d\n",(f[n][i]-f[n-1][i]+p)%p);
		return 0;
	}
	For(r,1,n)For(l,1,r)if(check(l,r))S[r].insert(l);
	For(i,1,n){
		for(auto l:S[i])For(j,1,k)(f[i][j]+=f[l-1][j-1])%=p;
	}For(i,1,k)printf("%d\n",f[n][i]);
	return 0;
}
